<?php
// $Id: users_controller.php @2009 ccbox.net 1:22 2009-5-14 $

/**
 * Controller_Admin_Members 控制器
 */
class Controller_Admin_Users extends Controller_Admin_Abstract
{
    /* ******************************************************************** */
    function actionIndex()
    {
        $show_box['title'] = '用户管理首页';

        // 分页查询
        $page = intval($this->_context->page);
        if ($page < 1) $page = 1;
        // 构造查询对象
        $select = Admin_Users::find('is_locked = ?','');
        $select -> limitPage($page, 15);

        // 将分页信息和查询到的数据传递到视图
        $show_box['pagination']  = $select->getPagination();
        $show_box['users']       = $select->getAll();
        $this->_view['show_box'] = $show_box;
    }

	/* ******************************************************************** */
    function actionIndexpart()
    {
        $show_box['title'] = '用户管理首页';
		
        // 分页查询
        $page = intval($this->_context->page);
		
        if ($page < 1) $page = 1;
        // 构造查询对象
        $select = Admin_Users::find('is_locked = ?','');
        $select -> limitPage($page, 10);

        // 将分页信息和查询到的数据传递到视图
        //$show_box['pager']  = $select->getPagination();
		$this->_view['pager'] = $select->getPagination();
        $show_box['users']       = $select->getAll();
        $this->_view['show_box'] = $show_box;
		$this->_view['countno'] = $this->_view['pager']['page_size']*($page-1)+1;
		if($this->_view['pager']['record_count']>0 && $page=='')
			$page=1;

		$pagediv = new Helper_JsPager($this->_view['pager']['record_count'], $this->_view['pager']['page_size'], 9, $page, 'opgopage1(\'admin|users|indexpart|','\')',5);
		$this->_view['pagestr']= $pagediv->show();
    }

	/* ******************************************************************** */
    function actionIndexpart1()
    {
        $demo = array();
		// 设置页面列表数目
		$pagesize = 10;
		// 获取当前页数，通常为get方式参数
		//$_REQUEST['start']
		$page = ($_REQUEST['start']/$_REQUEST['limit'])+1;
		$this->_view['pageno']=$page;
		//$select = AlarmTable::find()->limitPage($_REQUEST['start'], $_REQUEST['limit']);
		$select = Admin_Users::find('is_locked = ?','')->limitPage($page,$_REQUEST['limit']);
		$allc=$select->getPagination();
		$totaldata = $allc['record_count'];
		$demostr=$select->order("user_id desc")->getAll()->toArray();
		$date = date("Y-m-d");
		//dump($demostr);
		for($i=0; $i<count($demostr); $i++){
			if($demostr[$i]['group_name']=='系统管理组')
				$admind='';
			else
				$admind="<img class='uas' alt='admin|users|resetpw|user_id=".$demostr[$i]['user_id']."' src='images/key.png'/><img alt='admin|users|edit|user_id=".$demostr[$i]['user_id']."' src='images/edit.png' class='uas'/><img alt='admin|users|del|user_id=".$demostr[$i]['user_id']."' class='uas' src='images/del.png'/><img src='images/users.png' alt='admin|users|bind|user_id=".$demostr[$i]['user_id']."' class='uas'/>";
			
			$demo[] = array("date"=>$demostr[$i]['user_id'],"pageview"=>$demostr[$i]['user_name'],"ip"=>$demostr[$i]['group_name'],"op"=>"<img class='uas' alt='admin|users|view|user_id=".$demostr[$i]['user_id']."' src='images/view.png'/>".$admind);
			$date = date("Y-m-d",strtotime($date)-24*3600);
			
		}
		

		//$demo_out = array_slice($demo,$_REQUEST['start'],$_REQUEST['limit']);
		$str = '({"total":"'.$totaldata.'","root":'.json_encode($demo).'})';
		//dump($demostr);
		echo $str;
		
//		$demo = array();
//		$date = date("Y-m-d");
//		$totaldata = 55;
//		for($i=0; $i<$totaldata; $i++){
//			$demo[] = array("date"=>$date,"pageview"=>"71.72","ip"=>"202.200.12.17","visits"=>"4444","uv"=>'7777',"pvuv"=>"3","op"=>"enter");
//			$date = date("Y-m-d",strtotime($date)-24*3600);
//			
//		}
//
//		$demo_out = array_slice($demo,$_REQUEST['start'],$_REQUEST['limit']);
//
//		$str = '({"total":"'.$totaldata.'","root":'.json_encode($demo_out).'})';
//		echo $str;
    }

    /* ******************************************************************** */
    function actionAdd()
    {
        $show_box['title'] = '增加用户帐号';
        // 构造表单对象
        $show_box['form'] = new Form_UserAdd(url('admin::users/add'));
        $show_box['form']->_subject = $show_box['title'];
        if ($this->_context->isPOST() && $show_box['form']->validate($_POST))
        {
            // 是 POST 提交，并且表单验证通过
            try
            {
                // 创建 User 对象并保存
                $user = new Admin_Users($show_box['form']->values());
                //**************************测试**********************************88
                //$test_arr = Admin_Roles::find('rolename = ?', 'UNCHECKED')->query();
                //print_r($test_arr);
               // print_r($user->toArray());
                //*******************************************************************
                // 自动添加用户的默认组
                $user->roles[] = Admin_Roles::find('rolename = ?', 'UNCHECKED')->query();
                //print_r($user->toArray());
                $user->save();
                // 成功后重定向到登录页面
//                return $this->_redirectMessage(
//                    '注册新用户', 
//                    '您的新帐户已经注册成功，请输入用户名和密码登录。',
//                    url('default::default/framework', array('space' => 'admin','control' => 'users','acts' => 'indexpart|add')));

				//return $this->_redirect();
            }
            catch (AclUser_DuplicateUsernameException $ex)
            {
                // 捕获 AclUser_DuplicateUsernameException 异常，在表单中指出用户名存在重复问题
                //$show_box['form']['account']->invalidate("您要注册的帐号 {$user->account} 已经存在了");
            }
        }
        // 将表单对象传递给视图
        $this->_view['show_box'] = $show_box;
        $this->_viewname = 'form';
    }

    /* ******************************************************************** */
    function actionView()
    {
        $show_box['title'] = '用户详细信息';
        // 查询指定用户 ID
        $show_box['user_info'] = Admin_Users::find('user_id = ?', $this->_context->user_id )->getOne();
        if ( !$show_box['user_info'] -> id() )
        { // 如果用户 ID 无效，则返回用户管理首页
            return $this->_redirect(url('admin::users/index'));
        }
        $this->_view['show_box'] = $show_box;
    }

	/* ******************************************************************** */
    function actionViewblank()
    {
        $show_box['title'] = '用户详细信息';
        // 查询指定用户 ID
        $show_box['user_info'] = Admin_Users::find('user_id = ?', $this->_context->user_id )->getOne();
        if ( !$show_box['user_info'] -> id() )
        { // 如果用户 ID 无效，则返回用户管理首页
            return $this->_redirect(url('admin::users/index'));
        }
        $this->_view['show_box'] = $show_box;
		$this->_view['userid'] = $this->_context->user_id;
    }

	function actionSecpart()
    {
        $show_box['title'] = '默认首页';
        if ($this->_app->currentUserRoles())
        {
            // 如果已经登录，就转到任务列表页面
            //$show_box['ncArrs'] = Helper_Permissions::getNamespaceControllerArrs();
            //$this->_view['show_box'] = $show_box;
        }
        else
        {
            // 未登录则转到登录页面
            return $this->_redirect(url('default/login'));
        }
    }

    /* ******************************************************************** */
    function actionEdit()
    {
        $show_box['title'] = '编辑用户信息';
        // 查询指定用户 ID
        $edit_one = Admin_Users::find('user_id = ?', $this->_context->user_id )->query();
        if ( !$edit_one->id() )
        { // 如果用户 ID 无效，则返回用户管理首页
            return $this->_redirect(url('admin::users/index'));
        }

        // 构造表单对象
        $show_box['form'] = $form = new Form_UserEdit(url('admin::users/edit'));
        $show_box['form']->_subject = $show_box['title'];
        if ($this->_context->isPOST() && $show_box['form'] -> validate($_POST))
        {
            // changeProps() 方法可以批量修改  对象的属性，但不会修改只读属性的值
            $edit_one->changeProps($show_box['form']->values());
            // 保存并重定向浏览器
            $edit_one->save();
            //return $this->_redirect(url('admin::users/index'));
			return $this->_redirectMessage(
                    '修改用户资料成功', 
                    '用户资料已经成功修改！',
                    url('default::default/framework', array('space' => 'admin','control' => 'users','acts' => 'indexpart|add')));
			//return $this->_redirect(url('default::default/framework', array('space' => 'admin','control' => 'users','acts' => 'indexpart')));
			//index.php?action=framework&space=admin&control=users&acts=add
        }
        elseif (!$this->_context->isPOST())
        {
            // 如果不是 POST 提交，则把对象值导入表单
            $edit_one['password'] = '';
            $show_box['form']->import($edit_one);
        }
        $this->_view['show_box'] = $show_box;
        $this->_viewname = 'form';
    }

    /* ******************************************************************** */
    function actionResetPW()
    {
        $show_box['title'] = '重置用户密码';
        //判断是否为自身id
        if ( $this->_context->user_id != $this->_app->currentUserObject()->id() )
        {
            // 取得当前用户的信息 all()->query('roles'));
            $edit_one = Admin_Users::find('user_id = ?', $this->_context->user_id )->query();
            if ( !$edit_one->id() )
            { // 如果用户 ID 无效，则返回后台首页
                return $this->_redirectMessage(
                    '用户 ID 无效', '用户 ID 无效，请返回检查。',
                    url('admin::users/index'));
            }
            // 构造表单对象
            $show_box['form'] = new Form_UserSetpw(url('admin::users/resetpw'));
            $show_box['form']->_subject = $show_box['title'];
            if ($this->_context->isPOST() && $show_box['form']->validate($_POST))
            {
                $edit_one->changeProps($show_box['form']->values());
                // 保存并重定向浏览器
                $edit_one->save();
                return $this->_redirectMessage(
                    '重置用户密码成功', 
                    '用户登录密码已经成功重置，请通知相关人员使用新密码登录。',
                    url('default::default/framework', array('space' => 'admin','control' => 'users','acts' => 'indexpart|add')));
            }
            elseif (!$this->_context->isPOST())
            {
                // 如果不是 POST 提交，则把对象值导入表单，主要为一个：用户id
                $edit_one['password'] = '';
                $show_box['form']->import($edit_one);
            }

            $this->_view['show_box'] = $show_box;
            $this->_viewname = 'form';
        }else{
            //如果为自己的id，则跳转至默认修改密码页面
            return $this->_redirect(url('default::default/changepasswd'));
        }
    }

    /* ******************************************************************** */
    function actionBind()
    {//删除权限-从中间表删除相关联系，用中间表模型
        $show_box['title'] = '角色绑定';

        $user_id = $this->_context->user_id;
        //$roles = array('3'=>'1','4'=>'0','5'=>'1','2'=>'n','6'=>'n',);
        // 查询指定用户 ID
        $show_box['user_info'] = Admin_Users::find('user_id = ?', $user_id )->getOne();
        if ( !$show_box['user_info'] -> id() )
        { // 如果用户 ID 无效，则返回用户管理首页
            return $this->_redirect(url('admin::users/index'));
        }
		
		//找出所有角色信息
        $show_box['roles'] =  Admin_Roles::find()->asArray()->getAll();
		//找出该用户所具有的角色信息
        $user_roles =  Admin_UsersHaveRoles::find('user_id = ?',$user_id )->asArray()->getAll();
        /*if(!isset($user_roles->user_id))
        {
        	echo '设置';
        }
        */
        foreach ($user_roles as $value){
            $show_box['user_roles'][$value['role_id']] = $value['is_include'];
        }
		//取得数组中的所有键值
		if(isset($show_box['user_roles']))
			$show_box['user_roles']['role_id'] = array_keys( $show_box['user_roles'] );
		else
			$show_box['user_roles']['role_id']=array();
        if ($this->_context->isPOST() )
        {
            foreach ($this->_context->role_id as $key=>$value){
				//"n"表示用户对应的角色（或权限）为NULL，是空的
                if ($value == 'n'){
                    Admin_UsersHaveRoles::meta()->destroyWhere('user_id = ? AND role_id = ?', $user_id, $key);
                }else{
                    $find_one = Admin_UsersHaveRoles::find('user_id = ? AND role_id = ?', $user_id, $key)->query();
                
                    if ($find_one['user_id']){
                        Admin_UsersHaveRoles::meta()->updateDbWhere( array('is_include'=>$value), 'user_id = ? AND role_id = ?', $user_id, $key);
                        // 不能用以下这个方法，会添加重复记录，因为没有主键
                        //$find_one->is_include = $value;
                        //$find_one->save();
                    }else{
                        $add_one = new Admin_UsersHaveRoles(array('user_id'=>$user_id,'role_id'=>$key,'is_include'=>$value));
                        $add_one->save();
                    }
                }
            }
            return $this->_redirectMessage(
                '用户权限设定成功', 
                '指定帐户权限设定成功',
                url('default::default/framework',array('space' => 'admin','control' => 'users','user_id'=>$user_id,'acts' => 'indexpart|add'))
                );
			//
        }
        
        $this->_view['show_box'] = $show_box;
    }

/*****************************************************************************************/
	function actionDel()
    {
        $show_box['title'] = '删除用户';
        //注意设定用户删除的锁定
        if($this->_context->user_id)
        {
        	$user_id = $this->_context->user_id;
        	Admin_Users::meta()->destroyWhere('user_id = ?', $user_id);
        	if(mysql_affected_rows())
        	{
        		return $this->_redirectMessage(
                '用户删除成功', 
                '指定用户删除成功',
                url('default::default/framework', array('space' => 'admin','control' => 'users','acts' => 'indexpart|add'))
                );
        	}
        	else
        	{
        		return $this->_redirectMessage(
                '用户删除失败', 
                '指定用户删除失败',
                url('default::default/framework', array('space' => 'admin','control' => 'users','acts' => 'indexpart|add'))
                );
        	}
        }
        else
        {
        	return $this->_redirectMessage(
                '错误操作', 
                '操作错误，返回首页',
                url('default::default/framework', array('space' => 'admin','control' => 'users','acts' => 'indexpart|add'))
                );
        }
    }


/******************************************************************************/



	

}

